package com.itstyle.seckill.topic.desinger.design_cj.flyweight;

import java.util.HashMap;
import java.util.Map;

/**
 * @Auther: liuwenxiang
 * @Date: 2019/9/18 20:14
 * @Description:  享元模式：map管理对象
 */
public class FlyweightFactory {

    /**
     * 享元（Flyweight）模式的定义：运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销，从而提高系统资源的利用率。
     *
     * 享元模式的主要优点是：相同对象只要保存一份，这降低了系统中对象的数量，从而降低了系统中细粒度对象给内存带来的压力。
     *
     * 其主要缺点是：
     * 为了使对象可以共享，需要将一些不能共享的状态外部化，这将增加程序的复杂性。
     * 读取享元模式的外部状态会使得运行时间稍微变长。
     */
    private Map<String, Flyweight> hashMap =new HashMap<String, Flyweight>();



    public Flyweight getFlyweight(String key)
    {
        Flyweight flyweight = hashMap.get(key);
        if(flyweight!=null){
            System.out.println("具体享元"+key+"已经存在，被成功获取！");
        }else{

             flyweight =  new ConcreteFlyweight(key);
             hashMap.put(key,flyweight);
        }

        return flyweight;

    }
}
